{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic回归——从疝气病症预测病马的死亡率\n",
    "\n",
    "主要思想：\n",
    "\n",
    "根据现有数据对分类边界线建立回归公式，以此进行分类。\n",
    "\n",
    "**一般流程**\n",
    "\n",
    "1. 收集数据\n",
    "2. 准备数据：距离计算，需要数值型数据，结构化格式最佳\n",
    "3. 分析数据\n",
    "4. 训练算法：大部分时间用来训练，找出最佳的分类回归系数\n",
    "5. 测试算法\n",
    "6. 使用算法:首先，输入数据，准化为结构化数值；其次，基于训练好的回归系数对这些数值进行简单的回归计算，判定其类别；最后，在输出类别上做一些其它的分析工作。\n",
    "\n",
    "**Logistic回归**\n",
    "\n",
    "优点：计算代价不高，易于理解实现\n",
    "\n",
    "缺点：容易欠拟合，分类精度不高\n",
    "\n",
    "适用数据类型：数值型和标称型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#梯度上升法\n",
    "%matplotlib inline \n",
    "%run EXTRAS/sigmoidPlot.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%run EXTRAS/plotGD.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练算法：使用梯度上升找到最佳参数\n",
    "\n",
    "**梯度上升伪代码**\n",
    "\n",
    "```\n",
    "每个回归系数初始化为1\n",
    "重复R次：\n",
    "    计算整个数据集的梯度\n",
    "    使用alpha×gradient更新回归系数的向量\n",
    "    返回回归系数\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import *\n",
    "def loadDataSet():\n",
    "    dataMat, labelMat = [], []\n",
    "    with open('testSet.txt') as fr:\n",
    "        for line in fr.readlines():\n",
    "            lineArr = line.strip().split()\n",
    "            dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])\n",
    "            labelMat.append(int(lineArr[2]))\n",
    "    return dataMat, labelMat\n",
    "\n",
    "def sigmoid(inX):\n",
    "    return 1.0/(1+exp(-inX))\n",
    "\n",
    "def gradAscent(dataMatIn, classLabels):\n",
    "    dataMatrix = mat(dataMatIn)\n",
    "    labelMat = mat(classLabels).transpose()\n",
    "    m, n = shape(dataMatrix)\n",
    "    alpha = 0.001\n",
    "    maxCycles = 500\n",
    "    weights = ones((n, 1))\n",
    "    for k in range(maxCycles):\n",
    "        h = sigmoid(dataMatrix*weights)\n",
    "        error = (labelMat - h)\n",
    "        weights = weights + alpha * dataMatrix.transpose()*error\n",
    "    return weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 4.12414349],\n",
       "        [ 0.48007329],\n",
       "        [-0.6168482 ]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataArr, labelMat = loadDataSet()\n",
    "weights = gradAscent(dataArr, labelMat)\n",
    "weights"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析数据：画出决策边界"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plotBestFit(weights):\n",
    "    import matplotlib.pyplot as plt\n",
    "    dataMat,labelMat=loadDataSet()\n",
    "    dataArr = array(dataMat)\n",
    "    n = shape(dataArr)[0] \n",
    "    xcord1 = []; ycord1 = []\n",
    "    xcord2 = []; ycord2 = []\n",
    "    for i in range(n):\n",
    "        if int(labelMat[i])== 1:\n",
    "            xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])\n",
    "        else:\n",
    "            xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111)\n",
    "    ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')\n",
    "    ax.scatter(xcord2, ycord2, s=30, c='green')\n",
    "    x = arange(-3.0, 3.0, 0.1)\n",
    "    y = (-weights[0]-weights[1]*x)/weights[2]\n",
    "    ax.plot(x, y)\n",
    "    plt.xlabel('X1'); plt.ylabel('X2');\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotBestFit(weights.getA())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练算法：随机梯度上升\n",
    "\n",
    "**伪代码**\n",
    "```\n",
    "所有回归系数初始化为1\n",
    "对数据集中的每个样本\n",
    "    计算该样本的梯度\n",
    "    使用alpha×gradient更新回归系数值\n",
    "返回回归系数值\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def stocGradAscent0(dataMatrix, classLabels):\n",
    "    m, n = shape(dataMatrix)\n",
    "    alpha = 0.01\n",
    "    weights = ones(n)\n",
    "    for i in range(m):\n",
    "        h = sigmoid(sum(dataMatrix[i]*weights))\n",
    "        error = classLabels[i] - h\n",
    "        weights = weights + alpha*error*dataMatrix[i]\n",
    "    return weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataArr, labelMat = loadDataSet()\n",
    "weights = stocGradAscent0(array(dataArr), labelMat)\n",
    "plotBestFit(weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14.31407352  0.94851429 -2.09063024]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%run EXTRAS/plotSDerror.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def stocGradAscent1(dataMatrix, classLabels, numIter=150):\n",
    "    m, n = shape(dataMatrix)\n",
    "    weights = ones(n)\n",
    "    for j in range(numIter):\n",
    "        dataIndex = list(range(m))\n",
    "        for i in range(m):\n",
    "            alpha = 4/(1.0+j+i)+0.01 #alpha每次迭代以后减小\n",
    "            randIndex = int(random.uniform(0, len(dataIndex))) #随机选取更新\n",
    "            h = sigmoid(sum(dataMatrix[randIndex]*weights))\n",
    "            error = classLabels[randIndex] - h\n",
    "            weights = weights + alpha * error *dataMatrix[randIndex]\n",
    "            del(dataIndex[randIndex])\n",
    "    return weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14.39709725  1.20589599 -2.22272577]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEGCAYAAAB7DNKzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeZxcZZXw8d+ptfe9O0t3ks5CCAlLNgKyBAwokVXHDdwYdQZRdHQcR0B83d5xXpePyogioqIgLijgsAhIUGQRSEhCdkjSWbs7nXSn97XW8/5RtyvVW9GdVFd1kvP9fPLJrefeus+pp6rvuc9zN1FVjDHGmJG4Mh2AMcaYic0ShTHGmKQsURhjjEnKEoUxxpikLFEYY4xJypPpAMZDWVmZVldXZzoMY4w5bqxbt+6wqpYPN++ETBTV1dWsXbs202EYY8xxQ0T2jTTvhEwUxhjzZsKRKG6XICIDyqNRxeWKlXUFwnjdQjAcJRqFiCqhSJSG9j4E6A1FONTRx9SibKYV5+BxCzk+N81dQXweF26X0NgRQFEmFWThFqE3FKEvFCEcja0rHFHCUSUciRKKxMrysjy4XUJnX5jalh7yszyEI8rsijw8LmHt3hY8bhdFOV46+8K4RSjI9jC5MJuF04pS3laWKIwxw+oLRfC6XUSiSk8wTEdvmL5whGyvm0117UwvyWFSgZ99LT3sOdzNjJIcogrdgTC9oQgiUJrrJxJVGtp7yfK6yXc2gC3dQfweF6dOLqCzL0R9ay91rb30hiLsPdxNVUkOpbk+uoNhynL9KEpzd5Cdh7rwuWOHVqcUZdHWE6KutYdQRImqEo4oEVUi0di/cDTKgbY+XCKIwNSibA609dLUGYh/Tp/bhc/jwusWuoMRUKgqzqajL8zhrsBIzTMhleX5WPvlt6V8vZYojBkjVR2yF9p/h4ODHX3keD1sqm8jx+ehMNtDU2cQn0fwud2IQFtPiLbeIDsOdjJ/amF83obaVtp6QsydnE8gHKUo24vL2QM91NHHIxvqmVqUTVG2l5aeENOKs5leksOOQ10EI1H2N3ezs7GL82aX0tkXprIom2AkyobaNkSgtqWXUyflA9DWG6Qgy0soEkVEEGD34W7K8nyxjbsqNY1d6W7aUcvze+gKhAGoLs2hMMeHW8DjcuFygdfrwu1yEYlGCYajVORnkef30B0MszEhSXzq4tmxXkJYCUYiAGw90EFlUTaBcJRXdjXj97ooyfVx6WmTKMrx8uwbTdS29vCvF86iIj/WVj2BCBGN9QqaOgM8tfUgly2YTEW+P9a+QixxRZQcnxu/14XX7cLjiiUot0vwuV14PS6iUWXHoU6mFGZTnOvDJbGeTX8Sbu4KML00l2nF2USiigLZXjftvSF6gpFxaW85EW/hsXTpUrVjFCeXxI13XyiCSwSvOzascLC9j7wsD3n+2H7R4a4AXreLHYc66Q1GaO4OkO/3cqizj+e2NzGzLJdcv4f61l48bqEg20tprg+fx8VLNc08tfUgAH6Pi7OmFZHjc7P1QMeAvdSJoCLfj9/rorallxyfO74RWTy9iJ5ghOrSXLweF0JsI9afKLK9sWUri7Kpbe3h9YYOWntCXHv2NKYWZVOY7Y1v+CCW+LJ9bvweF1XFOWR73eT63ew53E1htpdQRMnyuugNRsjL8pDldaMKTZ0BgpHYd1WS66M3GOG0KQUU5njJ83k42NHH+v2tzJucjyqU5/uJKhTneBEROvtCeN0usrzuDLbyiUNE1qnq0uHmWY/CjLtoVAlGoqiCz+PC1b93FVVe3dvC9oOd7DzURVGul0n5WRzq6CMSVWpbe2jsDHCovY/iXB8luT5eb+hkZlkOG2vbCUai8TpcEtuQqEJjwgbb7ZL4Bq0w2wtAe29o1LGLgMclhCJDd6hOm1JAbzBCIBTB74mNF7f1hJg/pYAsr4v3LZ1GMBKlqjibxo4ArT0hinK8NHcFqCjIYnZ5LlleN6GIEgxHeWJzAzk+N9ctm47P42JTXTuF2V4mFfhp6Q7yyu4W5lTkcf6c0ties0Bzd5DCbG9sLN3lwuOOJcssrxu3S4bEnE6Lphcf0/unFmUztSh7xPn5Wd5jWr8ZPetRmDHp7AvR0Rcmy+OiINuL1+0iGI7yYk0TkShMKvCT43Ozobadrz6yJTbmmyBxwz1W/Xuy7b0hEn+2s8pzKc7xUVmUjd/jIj/LS67fzb7mHkpyfUBsgx+NxsavdzV2U5rnY0phFktmlDC1KItQRPG6hdI8P16X4HHHNsRFOT5UlY6+MOFIlM6+MLl+D+X5/qNuQ2MmIutRmNjGrjcMArubughFlEkFfhra+2jsDMT3tl/Z3cz/vlbP4hnFRCLKspklfOPxbQBUFmVT39Y7YL1e9/B724OdUVlIRb6fKUVZtPeGeW57Ix19sTHmX/7z2Wyub2fFvApK83yU5fljZ4Y4SabcGedNVNvSg9/joqIg65jb5s2ISLx9SvMsQZiTj/UoTnBPbm7g3/+wgUhUR7VBT+ayBZPI8XmYVJBFZ1+IXU1dLJpejNftYuehTqaX5DCzLJfOvjCLZxTz5OYGVp4+mflTC8jxDd0nae4K2IbXmAnCehTHuUhU2d3UxV3P7ebCU8pYvaeFUyrymFqUza6mLpq7grR0BzjY0ccru1sAmDc5n75QhL3NPfH1TC3MYuH0Isry/LgkdpC2tTvInIo8mrsCzJtSQHGOj+JcL6dU5NPUGSAQjh1srCrOHrJX/2aWzEg+Rm1JwpjjgyWKNFmzpwWvO3YGTiiq+NxCeX4Wuxq7aOzsQxUOtPfS3BVkRmkOh7uCNHb28Y+a5gHreWh93ajqm1aSQygSjSeKrV+/jFz/2L7uyYXjP6xjjJn4LFGkQTSqvO+nL496+diFSj6C4eiQeV+9aj4FWV4unFvGofYA7b0hPvSL1QA8958XU1Wcg0uI7/2rc/GRx233fzTGHB1LFCnS2h3km0+8TjgSpScYu6J1Q20boUh0wOmap00p4I7rFrGvuZuuQJi5k/IJRaIUZHnp6ItdMHPurFLgyEVc+1t6+OPaOv79bXMHnPJYkR/b43/8MxdQmO1lWknOkLhEJH7KpDHGHA1LFCmyZm8LD66LDQvNnZRHTzBCfVsvp00p4OyZJew42MnlZ0zhhuWzyPV7mFOR96br7O8VzCjN5QuXnTricqdXFqbmQxhjzDAmTKIQkXuAK4FGVT3dKSsBHgCqgb3A+1S1NVMxJopElTcOdtDZF+Zgex8/+fsuAF744luH3bM3xpjj1YRJFMCvgB8B9yWU3QL8VVW/JSK3OK9vzkBscarKf/xxIw+vrx92fkG2XS1qjDmxTJgjnKr6PNAyqPga4F5n+l7gnWkNapAt9e3MvPWJAUnis5ecwkOfPI+q4titBvLHeGaRMcZMdBN9qzZJVRsAVLVBRCpGWlBEbgBuAJg+ffq4BHPlHS/Gp5/87IWcNqUg/vqZz19ES3cwfh97Y4w5UUyYHsWxUtW7VXWpqi4tLx/2aX7HrDgnNqz03fecOSBJQOwmbMluYGaMMcerid6jOCQiU5zexBSgMZPBFGR7WTS9mPcunZbJMIwxJq0meo/iUeB6Z/p64JFMBRIIR9jXHLsRnTHGnEwmzFZPRH4HvAycKiJ1IvJx4FvA20RkJ/A253VGtPfEnmFg1ywYY042E2boSVWvG2HWJWkNZASdzmMX+89uMsaYk8WE6VFMdD2B2LMRhrtdtjHGnMgsUYxS/2M3fXaMwhhzkrGt3iiFnUThteskjDEnGUsUoxR2nvNst+s2xpxsbKs3Sv1DT3bLbmPMySalR2ZFpBBYCVQCChwA/qKqbamsJxPCzvOmfdajMMacZFK21RORjwDrgYuBHCAXeCuwzpl3XAtZj8IYc5JKZY/iNmDJ4N6DiBQDqxl4+/DjTjxRuKxHYYw5uaRyqyfEhpsGizrzjms29GSMOVmlskfxTWC9iDwN1Dpl04ndeuP/prCejLChJ2PMySqVu8d/A5YCzwEBIAj83SnblcJ6MmL1ntgzlSxRGGNONqnsUTwH3AV8X1XDACIyCbgDOBU4O4V1pdWre1v402v1FOV4KbRHnRpjTjKp7FEsAWYDr4nIChH5LLCG2B1hz0lhPWnV0Rfi+nvWkONz88znL8LvcWc6JGOMSauU9ShUtRX4hJMgniF2DcW5qlqXqjoy4cO/WENPMMLt719IWZ4/0+EYY0zapfI6iiIR+SnwUWIX3T0IPCkiK1JVR7qt39/Kxto2rjprKu9cVJnpcIwxJiNSeYxiPXAncJNzjOJpEVkI3Cki+5I8b2JCikSVG+5bC8DXrpqf4WiMMSZzUpkolg8eZlLVDcB5IvKvKawnLX63Zj+Hu4J8+NwZlNqQkzHmJJayoadkxyJU9WepqiddHtt4AIBb3jEvw5EYY0xm2WXGw9h+sJPVe1q4Yfkscv32RDtjzMnNEsUwvvnE6wBcs3BqhiMxxpjMs0QxiKqyfl8r8ybns2BqYabDMcaYjLNEMcj2Q510BcK8b+m0TIdijDETgiWKQdbtawVgyYziDEdijDETgyWKQR54NXbj23lT8jMciTHGTAzHRaIQkZUisl1EakTklvGsq6M3xFlVhXZPJ2OMcUz4RCEibuDHwDuA+cB1IjIul0qHIlH2NvewbGbJeKzeGGOOSxM+UQDLgBpV3a2qQeD3wDXjUdGmunYASnLtSmxjjOl3PCSKSo48MQ+gzikbQERuEJG1IrK2qanpqCpq7Q4CcP6c0qN6vzHGnIiOh0Qx3CPlhjybW1XvVtWlqrq0vLz8qCp6dV/sKXbFOb6jer8xxpyIjodEUQckXtRQRexZFynX1RcGYHJh1nis3hhjjkvHQ6J4FThFRGaKiA+4Fnh0PCoKhqNMLczC6z4emsUYY9Jjwt/xTlXDIvJp4C+AG7hHVbeOR13BSBSfx5KEMcYkmvCJAkBVnwCeGO96gmFLFMYYM5htFRNYojDGmKFsq5ggGInis+MTxhgzgG0VEwRC1qMwxpjBbKuYYM3eFnx2jydjjBnAEsUg5Xl2+w5jjEl0XJz1lC5//Y+LmFack+kwjDFmQrFEkWB2eV6mQzDGmAlHVIfcNum4JyJNwL6jfHsZcDiF4aSKxTU2FtfYWFxjcyLGNUNVh71R3gmZKI6FiKxV1aWZjmMwi2tsLK6xsbjG5mSLyw5mG2OMScoShTHGmKQsUQx1d6YDGIHFNTYW19hYXGNzUsVlxyiMMcYkZT0KY4wxSVmiMMYYk5QlCoeIrBSR7SJSIyK3ZKD+vSKyWUQ2iMhap6xERFaJyE7n/2KnXETkh06sm0RkcQrjuEdEGkVkS0LZmOMQkeud5XeKyPXjFNfXRKTeabMNInJ5wrxbnbi2i8hlCeUp/Z5FZJqIPCsir4vIVhH5rFOe0TZLEldG20xEskRkjYhsdOL6ulM+U0RWO5/9AedploiI33ld48yvfrN4UxzXr0RkT0J7LXTK0/bbd9bpFpHXRORx53V620tVT/p/xJ6ctwuYBfiAjcD8NMewFygbVPYd4BZn+hbg28705cCTgADnAqtTGMdyYDGw5WjjAEqA3c7/xc508TjE9TXgC8MsO9/5Dv3ATOe7dY/H9wxMARY70/nADqf+jLZZkrgy2mbO585zpr3Aaqcd/gBc65TfBXzSmf4UcJczfS3wQLJ4xyGuXwHvGWb5tP32nfV+Hvgt8LjzOq3tZT2KmGVAjaruVtUg8HvgmgzHBLEY7nWm7wXemVB+n8a8AhSJyJRUVKiqzwMtxxjHZcAqVW1R1VZgFbByHOIayTXA71U1oKp7gBpi33HKv2dVbVDV9c50J/A6UEmG2yxJXCNJS5s5n7vLeel1/imwAnjQKR/cXv3t+CBwiYhIknhTHddI0vbbF5Eq4Arg585rIc3tZYkiphKoTXhdR/I/qvGgwNMisk5EbnDKJqlqA8T+8IEKpzzd8Y41jnTG92mn639P//BOpuJyuvmLiO2NTpg2GxQXZLjNnGGUDUAjsQ3pLqBNVcPD1BGv35nfDpSmIy5V7W+vbzrt9QMR6b+9dDq/x9uBLwJR53UpaW4vSxQxMkxZus8bPl9VFwPvAG4SkeVJlp0I8cLIcaQrvp8As4GFQAPwvUzFJSJ5wEPA51S1I9mi6YxtmLgy3maqGlHVhUAVsb3a05LUkbG4ROR04FZgHnA2seGkm9MZl4hcCTSq6rrE4iR1jEtcJ+R1FGVlZVpdXZ3pMIwx5rixbt26wzrCTQFPyNuMV1dXs3bt2kyHYYwxxw0RGfGO2zb0NAZ1rT3c9Jv17DzUmelQjDEmbSxRjMEDr9by580NvO0HzxMIRzIdjjHGpIUlilEKRaLc8bea+OvW7lAGozHGmPSxRDFKLd3BAa9/s/poH6BnjDHHF0sUo7S/pWfA6/Ze61EYY04OlihGqSc48JhEWZ5/hCWNMebEYolilBKvN3EJfH/VDl7Y2ZTBiIwxJj0sUYxSf5646a2zWXn6ZAA+/Is1GYzIGGPSwxLFKEWdTHHZgsnc+cElGY7GGGPSxxLFKEWdHoU4t0x516LY/bR6guGR3mKMMSeEjCWKkR6sMmiZi0WkPeGhIV/JRKxw5BiFOLfWumxBbPjp+0/vyFRIxhiTFpm811MY+A9VXS8i+cA6EVmlqtsGLfeCql6ZgfgG6O9RuJxM8fb5k/C6hYfW1/HzF/dw/pxS7v/4OYgMd5NGY4w5fmWsR3EUD1bJqP4ehctpMZdL+MpVCzi9shCAf9Q086U/bc5UeMYYM24mxDGKYR6skugtznNsnxSRBWkNLMHgHgXAh8+dwa8/fg5rbrsEr1t4asvBDEVnjDHjJ+OJ4k0e+LIemKGqZwF3AP+bZD03iMhaEVnb1JT66xv6z3oabmCpIj+LT148h9aeECfi8z2MMSe3jCYKEfESSxK/UdWHB89X1Y7+59iq6hOAV0TKhluXqt6tqktVdWl5+bDP3jgm8cdHjXAMwuuKlUeiliiMMSeWTJ71JMAvgNdV9fsjLDPZWQ4RWUYs3ub0RXlE/BjFCMeqPe5YU4YtURhjTjCZPOvpfODDwGbngeYAXwKmA6jqXcB7gE+KSBjoBa7VDI3tROOJYoQehTtWHopEyfK60xbXySocifJabRsLpxXhdWd8BNWYE1rGEoWqvsjwQ/6Jy/wI+FF6IkouGo39P9LZr26nqxGOWI8iHf7pJy+xqa6dMyoLufyMKdx40az4sKCqIiK094Sobe2hIt9PRUFW/L39840xo3NCPjN7PPRv/kfqUfQPPYX6M4oZV81dseeDbK5vZ3N9O997ejuTCrLo6AvR2Rfm+rfM4N6Xjzwz5IsrT8UlwjPbDlHT1MXi6cWs2dNCVJVb3zGPc2eV8tc3Gnn7/EnMKs8bUl9Ld5DmrgC/emkvJbk+Pv+2uZZsRklVeeNgJy/vaqahvZc9h7vpCUaYWZZLZXE2nX1h9rf0EAhFaGjv44JTyrj1HafR0N5LR2+YuZPyEBHCkSir97Rw+tRCCnO8mf5YJxVLFKMUHXRl9mB2MHtsVJVvPL6Nt8+fzFtml464XE8wzBObDxIIR3jPkiq21Lezq7Gb+rZecnxuPnnRbL63agfhqDKzLJf9LT109oW59+V9ZHldfOicGfz8xT1856ntABTnePG5XazZ00KOz00oEuX/PLI1Xt/jmw7w0fNmUlmczdYDHWyua+PpbYeG3Gb+w+fOGNBLyaS61h7K8vzjOuT542drWLevlU9ePJuzq0sGzNt2oIP23tCI3+PH713L395ojL+uyPfT2BngpV0DDzd63UIoomw90MFPn9sdLz+rqpD5Uwt5YWcTda293PTW2fznZfNS+OlSb8ehTh7ZUE84qgjC5WdMpizPzx/W1nKoo49sr4csr4tcvwePS4gq1DR28dSWBj56/kzysjxcddZUNta20ReKMKM0l6ribPweF7uautlQ28blZ0xmSmF2Wj6PJYpR0jc5RjGeQ0+v7G5m24EOPnbBzJSv+82oKp/53WtEosrZ1SWcXV3CGVWFx7ze7mCEX/5jL7/8x14WTy9i/f427vrQkvideQPhCB/42WrW7WuNv+e2P20ZsI5AOMqnV8zhktMm4fe6mF2eh6qy53A3XreLigI/bhGmleQwvTSHxdOLKcjyDOgJ/PyF3Ty28QBnVBWyqa6dTXXt/McfN8bn5/rcFGV7Ob2ykA+dO4Ontx7k8U0NtPaEMpooAuFY+63adijeRktnFPMvF86Kt2GqfP2xrfzyH3sB+NsbjXz73Wfwp9fqOWtaEU9tOci+5thDvZ787IXk+T0caOvlyS0H+dVLsfe4BOZU5PHDaxcxf2oBAH/ZehBV5eJTK4DYsT2v20VNYxe3P7OD53Y0MakgC1XY29xDfVsfef5YIvzxs7tYNK2Y6rIcinJ89AYjtPYEae8N8fD6emaV5XL9+dUUZB1bryMQjlDX2susstwx9R63Hmjnih++CIDP4yIYjnLXc7vi88vyfARCUXpDkWFPfvnRs7FHLn/ryTeS1vP4pgPcc/3ZNHcHqGnsYs2eVsLRKN+45vRRxzpaciKe97906VJdu3ZtStf5uzX7ufXhzbx864phs/gjG+r57O838MznlzOnIj+ldVff8mcA9n7rijG/9xuPbeOef+xhzZcuGdWGrS8U4fWGDhZNLwZgS307V97x4oBlPnzuDP5pcSVnVRXhcgmqyraGDlSJX6n+Zg609XLet/42oKwgy8Omr10GwOa6dq76Uaze2eW5NHUGmFKYzdSiLBra+/B73bx/6TQ+cM70UdU3Gm8c7ODbT77BjNJcVsyrINfvZvH04gEbif7v+Ybls/jS5acNeH80qjy68QAXzS2nONeXsrgAGtp7efsPnueH1y6iuTvID/+6k/0tPfG98ETJfidbD7Tz8q5meoMRLpxbzsH2Pjr6QuT5PfHe8MH2PurbeplcmMWSGcW8966XAVhWXcKavS0D1je7PJf8LC8battGrPOdC6dy01vncMqk0f9dqCqqsTsgJLr14U38bk3tqNbxiYtmUXOoiz2Hu7n7I0uZUxEbUmzqDHC4K8DOxi5UlZ2HumjrDVKU7eNgRx+PbKjn31acwp9eq2f34W6qS3P43Q3nDvi77wtF2Fjbxj92NbPjYCdfXHkq+1t6+O3q/Ty97RAAt79/Ie9cVMn3nt7O6w0dvGV2GWdUFrJsZsmA9USiikuEjr4QNY1dnFFVyGMbDxCJKlXF2by4s5mdjZ28sPMw1y2bxpIZJXwhYWemnwicWVnII5++YNTtPPD9sk5Vlw47zxLFm1uzp4X3/TT2x7L6S5cwaZgN7rPbG/noL1/l/16zgEXTi/F5XOT5PUwtOvau4bEkiv73ul3C2tsuHXYDtq+5G9VYd/mGX68D4E+fOo9F04v539fq+dwDG7j27GmsmFcRn9/v3FklNLT3xfcqAfL9Hr7xzgW8a1EVAKu2HSIUibJiXkV8eOSJzQ186jfrAXjkpvO58f51NLT3sXLBZLJ9bnL9bu5/ZT8P3vgWlg4a6sik5q4AS/7rGd56ajlnVhVR29qDW4Qsr5uLTy3n4/eu5SNvmZHSvbqD7X1c8cMXaB703PYPnDOdr141n8NdQQKhCP/54CbW7WvltstPY/7UAiYVZPHIhnoKs718/IKZ/GXrIW68f90ItSQ3tTCLp/59OVvq2/G5XWyqa2d6SQ6XnFZBS3eQzz2wgdnleSyYWkC2z82ssjxK83wU5Xjxe1I7JPbnTQ187bGtvH3+JOZOysfvcVGa58fncZHlcXHrw5vZfbg7vjff762nljOpIIvfvzo00XhcQsRJTiP54DnTqS7NZe2+FlZtO8Rwo8wugcvPmMK7F1fx1nkVqfi4w2rs6OPPmxsAqG/tZf7UAt42fxL5x9CLskRxDBL3bAHW3HYJFflDE8X6/a38050vDSm//+PncMEpw14jOKxAOEJrd4hwNEokqtx4/3peb4hdsL7rvy+PD3EN1t91H6w/UQA8/e/LmTtor+7el/by1Ue3Dn4bEPvD+M3q/QCs+vflnDIpn1XbDvH37Y3x8rOri2ntCdEbjFDf1ktVcTZ1rb0APPP5i1i3r4WbH4rdA+vCU8q48aLZnD+nLJ6A/vofFzG7PI+ntjTwmd+9NmDv2OsWXrx5xbCJOVNUlZm3PhF/7fO4cAn0hY5skJbPLee+jy075roa2nv57yfe4LGNBwaU33HdIi48pYyinIFJ/6ktDdx4//qk6yzN9fGtd5+J1y2owsOv1VOS4+XqhZU8tL6OyxZMZlZZLu29Ie74205qGrtYPrecj543k+mlOcf8mdItGlW+8ugW7n9lf7wsx+emOMfHZQsm854lVcyuyMXn/O109Ib5xYu7Kcj28q5FlfSFo7zvrpepb+sdsN7SXB9XnTWVD507nV+8uJfDXQEuPa2Ct82fTEmKe5PpYoniKKkql93+PDsOdcXL1n750mGflx2ORPnM716jOxjhg+dMp703xBcf3ATAZ1bMoaIgi8sWTBo2yUBsQ//+n77M+v0jd+FfufUSJhX4eeDVWm5/ZidzJ+ejqqze3UIwEuXFm99KVfHAP+Ybf72Op7bG7kFVWZTNV66az66mLr7z1HbePn9SvJsMsbHTX3/8HL7+2FZe2X1kiOELb5/Lp1ecMmC97b0hOnpDTCs5Ul80qrhcwifvX8eTSe57le110xuKxD/T5MJYm/QGI7T1BvlHTTNTCrNYOK2IXP/EO4z2zLZD/H1HI9eePZ0FUwtQhVlfemLAMnd9aDErT58y6nWqKl9/bBvZPjdLphez5UA7dz67i2AkyjsXTqWxM8At75jHmVVFbxrbs9sbeXTjAT7ylhmcUVkU70W84/TJfPnK+VSmoJd7vFm9u5l9LT28a1HlmK+7CUeivHGwk9cbOlg4rYi9zT1celrFCXfWmyWKo1DX2sPn/7CRNXtauOmts/nxs7GDUeu+fCmlwySKwaJR5V/uG3i2x1lVhfzwukV09IZZte0giJDtdVOU4+XWh4/cefYb1ywgy+OmOxjG43bR2NHHHX+r4cnPXsivX9nHb1fvH65KHv7UeSx2ji30+9ivXgK5Lq8AACAASURBVGX9/laC4eiQM3f63fexZSybWYLbJXjdLiJR5ZXdzeT43CycVjTmPwhV5S9bD8b3bu/92DJcAmv3tnLn32vivYbq0hye/cLFJ8Qf3I5DnWR73fxg1Q4efq0eEdj5X++Inzbdrz+Z/u2NQ7yyu4WuQJjW7iBvHOxkz+HuActWFmVzxwcWDflOx6qxs48cn4e8CZh0zcSR8kQhIm9T1VUpCGwl8D+AG/i5qn5r0Hw/cB+whNitO96vqnvfbL3HkiiaOgO8sLOJz//hyMGiZ79wMX/ZepC1e1u560OLh/zxJ7Oxto2Xdzfz65f3Dem+DvbBc6bz5Svmk+0bOKb79NaDA44NFOd4+fIV87ns9Mlce/fLbKmPDU3Nm5zPl6+YzwWnlKGq1LX2cuUdLzKnIo8Hb3wLD6+vp6krwJzyPMry/Ww90M75s8uoLssd9ecZi5buIOFIdMBB9GA4yo5Dnexr7mHl6ZNHHEo7nt338l6+8shWbn//Qg529NHQ1su9L+8j1+eme1CyLs31UZjjpSzPz5b6dvL8Hn764SVUFmVTnu8/IZKoOT4kSxRHu4vxC5xbbRwtEXEDPwbeBtQBr4rIo4MeXPRxoFVV54jItcC3gfcfS71v5taHN/HM640DymaW5XLjRbPhorGv76xpRZw1rYi61p74OOldH1pMltfNBXPK+MWLe3h5dzMfO38my+cOfzNDf8L58e9aVMlXr5ofH59+/DMX8sCr+7n5oc28cbCTD/1iNSW5Prxu4VBHAIBcf+yU0HcvqRqw3oXTkg9jHKvhxmp9HhenVxaO+uyo49GsstjZNZ97YMOA8umluTR3BWjsDFCc4+U3/3Ju/HRRYyayEROFiDw60ixg5CukRm8ZUKOqu536fg9cAyQmimuArznTDwI/EhEZz/s9JR6PgNhQUyr43LGN/fuXThswdv2Ji2bziYtmJ32v33OkB/OD9y8cMv+ahZXUNHaxdl8rr+1vo6U7yEVzy4lqB02dAf7PFacNeY8ZP+fNLuV/bzofVSU/y8ucijy6A2Fy/R421Laxua6ND54zY8ipn8ZMVMl6FBcCHwK6BpULsY38saoEEs9TqwPOGWkZVQ2LSDuxJHV48MpE5AbgBoDp04++s7O/5chpnk/824WjOh4xGlecOZl9zd1cf171mN87uSALt0u4cISzp7K8bm67Yj7P72jiR3+r4TvvOXPchpPMm3O5ZEhvrf+g/MJpRePekzMm1ZIlileAHlV9bvAMEdmegrqH250a3FMYzTKxQtW7gbshdoziaIOqLMqmvq2XxdOLUjossGRGCb/456O7HqC6LJf1/+dt5L/Jwcjlc8tHHL4yxpijlWzLc4OqjnQJ5G0pqLsOmJbwugo4MMIydSLiAQqBFsZJe0+I+rZerjprKndct2i8qjkqhdl2EzRjTGYkO33nORH5orOBBkBEJonI/cCwDxoao1eBU0Rkpoj4gGuBwcdFHgWud6bfA/xtPI9PvFYbu2fOIhsaMMaYuGSJYgkwG3hNRFaIyGeBNcDLDD2WMGaqGgY+DfwFeB34g6puFZFviMjVzmK/AEpFpAb4PHDLsdabTP+9bpZWH9t568YYcyIZcehJVVuBTzgJ4hliw0Lnqmpdqip3noP9xKCyryRM9wHvTVV9b6b/To4n4rn9xhhztEbsUYhIkYj8FPgosJLY6alPisiKdAWXbhFLFMYYM0Syg9nrgTuBm5xhoqdFZCFwp4jsU9Xr0hJhGvX3KDyWKIwxJi5Zolg+eJhJVTcA54nIv45vWJkRjfcoxnbTMGOMOZGNuEVMdixCVX82PuFklvUojDFmKNt1ThCJxp4pYMcojDHmCEsUCaxHYYwxQ1miSHDAuQ249SiMMeaIjDzJRES+C1wFBIFdwEdVdcij3URkL9AJRIDwSPdKT5X+a77zsuwBL8YY0y9TPYpVwOmqeiawA7g1ybJvVdWF450kgPjzG1L9MHhjjDmeZSRRqOrTzrUZELtLbVWy5dPlofUpu+jcGGNOGBPhGMXHgCdHmKfELvRb5zxvwhhjTJqN22C8iDwDTB5m1m2q+oizzG1AGPjNCKs5X1UPiEgFsEpE3lDV50eoLyUPLjLGGDPQuCUKVU36DFERuR64ErhkpFuHq+oB5/9GEfkTsSfrDZsoUvXgImOMMQNlZOhJRFYCNwNXq2rPCMvkikh+/zTwdmBL+qI0xhgDmTtG8SMgn9hw0gYRuQtARKaKSP9txycBL4rIRmLPwfizqj6VmXCNMebklZELBlR1zgjlB4DLnendwFnpjGvpjGJ8nolwfN8YYyYO2yomUMAldlW2McYkskSRIKqK5QljjBnIEkWC4c+9MsaYk5sligQ29GSMMUNZokigNvRkjDFDWKJIoGo9CmOMGcwSRYLN9e1YmjDGmIEsUSSoKs7m7JklmQ7DGGMmFHtCT4IXb16R6RCMMWbCsR6FMcaYpGSEG7ce10SkCdh3lG8vAw6nMJxUsbjGxuIaG4trbE7EuGaoavlwM07IRHEsRGRtOh67OlYW19hYXGNjcY3NyRaXDT0ZY4xJyhKFMcaYpCxRDHV3pgMYgcU1NhbX2FhcY3NSxWXHKIwxxiRlPQpjjDFJWaIwxhiTlCUKh4isFJHtIlIjIrdkoP69IrLZeYb4WqesRERWichO5/9ip1xE5IdOrJtEZHEK47hHRBpFZEtC2ZjjEJHrneV3isj14xTX10Sk3mmzDSJyecK8W524tovIZQnlKf2eRWSaiDwrIq+LyFYR+axTntE2SxJXRttMRLJEZI2IbHTi+rpTPlNEVjuf/QER8Tnlfud1jTO/+s3iTXFcvxKRPQnttdApT9tv31mnW0ReE5HHndfpbS9VPen/AW5gFzAL8AEbgflpjmEvUDao7DvALc70LcC3nenLgScBAc4FVqcwjuXAYmDL0cYBlAC7nf+LnenicYjra8AXhll2vvMd+oGZznfrHo/vGZgCLHam84EdTv0ZbbMkcWW0zZzPnedMe4HVTjv8AbjWKb8L+KQz/SngLmf6WuCBZPGOQ1y/At4zzPJp++076/088Fvgced1WtvLehQxy4AaVd2tqkHg98A1GY4JYjHc60zfC7wzofw+jXkFKBKRKamoUFWfB1qOMY7LgFWq2qKqrcAqYOU4xDWSa4Dfq2pAVfcANcS+45R/z6raoKrrnelO4HWgkgy3WZK4RpKWNnM+d5fz0uv8U2AF8KBTPri9+tvxQeASEZEk8aY6rpGk7bcvIlXAFcDPnddCmtvLEkVMJVCb8LqO5H9U40GBp0VknYjc4JRNUtUGiP3hAxVOebrjHWsc6Yzv007X/57+4Z1MxeV08xcR2xudMG02KC7IcJs5wygbgEZiG9JdQJuqhoepI16/M78dKE1HXKra317fdNrrByLiHxzXoPrH43u8HfgiEHVel5Lm9rJEETPcYyjSfd7w+aq6GHgHcJOILE+y7ESIF0aOI13x/QSYDSwEGoDvZSouEckDHgI+p6odyRZNZ2zDxJXxNlPViKouBKqI7dWelqSOjMUlIqcDtwLzgLOJDSfdnM64RORKoFFV1yUWJ6ljXOI6Ia+jKCsr0+rq6kyHYYwxx41169Yd1hFuCnhcPI9CRFYC/0PswNrPVfVbyZavrq5m7dq1aYnNGGNOBCIy4h23J/zQk4i4gR8TG5KZD1wnIvMzG9XYXfr95/iXey15GWOOPxM+UTCBzkj65p+3UX3Ln3l+RxO1LT10B8Jv/iYgElVqGrt45vVDR1VvbzBCc1fgqN7742dr+MDPXjmq9xpjDBwfiWJUR+tF5AYRWSsia5uamsYlkJ+9sAeAj9yzhgu/8ywLvvoXntrSwHf/8gY3/XY9dz+/i7aeIO29IQCe39HE1gPtvLTryHNEth3oYENtG/ubewDYUt/Oxto22ntDHO4KcNhJCC3dQaJRZV9zN5d+/zmW/NczXHnHCzR3BdhS386jGw8QiSq7mrpYv781vv6NtW109oUIRaIcaOvlu3/Zzku7mgGoaeyivTfEun2t/KPmMNGosqG2jYb23vj7Q5EoW+rb2Xqgnb5QhGA4yjce20ZjRx8Am+raeGFnE7uauugJxhJla3eQbzy2jed3NBGNKqFIlJbuIHsPdxOKRLn/lX3UtfZQ19pDVyDcf1442w500NodRFXpDUbYWNuGqhKORAlFovxhbS2BcIRoVNlxqJNAOAJAR1+I5q4AP31uF92BMH2hCKFINP4Z+j9/Ypt3jZDUI9H4eeo0tPfy/I4jv52axk46+kIDlgmGo3x/1Q72HO4esq6os0OgqvSFIvGyxOOAgXCE9t5Q4vnxo6KqrNp2iEg0tu7E9wbDUYLh2Odt7OgjEh263sNdgfhvrr+NRysQjtATDBOORIkOs26Aps5A0s8TGkN9qko0qvHPlCgciQ75fIkx9QYjI8Y4OJ4XdjbF22Gk2IeLAaC2pYf23hDhSHTEZU4kE/5gtoi8F7hMVf/Fef1hYJmqfmak9yxdulTH4xhF9S1/Tun6inK8tPWEUrKuXJ+bXL+Hxs6j63kALJ9bPmBDOVhZnj+eyPrNm5zPGwc7j7rOVDqlIo8cn5uNde3xsimFWTS095Hjc3PR3HKe3HIQAK9bCEVG/u17XEI4YYMztTCLqxdWcu9Le+l1ksDMslw+eM50Tp2cz6fuX0/nCMko3++hNxQZsL5+y2aWEIpEaesJxZPPhaeUUdfaS2dfiJJcHy6REdt4/pQCtjUMf5LV0hnFNHcHByS1MyoL2dfcTUdfmCvPnMLjmxoAuGbhVB7ZcIBcn5uLTi0ny+vm4fX1w67X73ERcDaOxTleWhN+wxfMKePFmsO4XUIkqpTk+vB7XDS0x3Y0VsyrYEphFn/f3kRHX4j/ftcZvLjzMBtq29h+aOhnXDazhPNnl9HZF+Kh9XXxukTgXQsrae8N8dc3GinK8dIbjMTjAjh/TildgdgOSL+F04qobemhuTsYLyvK8RIIRbnglDIOdwXYUNvGVWdOpSDbw/2v7B8QT67PTXcwMiTOSQV+DnXE/jZmluWy53A3588pZemMEh7beACXS1gwtYBXdjfzrkVVuAQKsr24Raht7SEUifLE5oO094Y4bUoBuT4371xUyZb6dp55vRGvW+joDfHxC2cxtTCLWx7ezIzSHN67pIrndjThdgnzJhdw6WmTuOCUsmG/tzcjIut0hIceHQ+J4i3A11T1Muf1rQCq+v9Gek86E8VbZpXy7iVVfOGPGwFYPL2IWeV5RFX502v1zK3IJ8vnHvBj/frVC/jqo1spzvEyvTSX/c3dA/7YzqoqZEZpLnWtPazf3zakToD8LA+dfSMPfX3o3Oms3dt6TBvxxA0CxP4A9jV3k7i9u2huOT3BMK/ubR32PYmyvW4iUSWYZO+yqjgbt0vwuIRdTQP32ivy/UkToc/tiq/7ornlPLejiYp8Px19IXJ8HnxuFwednlE6leX5ONwVHHbespkleN1Ca3covsE/a1oRuxu7Rkw8qVJVnE1da++bLzhGw+1QJCrN9Q3YUA82d1IetS298YQ8WoXZ3nhv3u9xUZbnp74t+ed758Kp9AQj7Gvuoaapa9jeWKLBOxBHa/B6Rmozn8c1ph5LWZ6ftV++9KhiSpYojoeznl4FThGRmUA9scvSP5CJQM6ZWcLqPS1cfsZk7vzgkgHzbn5oE5GocteHllBRkAXA99+3MD7/m3/exs9e2MMnls/i+vOquf686iHrX7evhe5AhOVzB56hdvWPXmRTXTvvXVLFvy6fxYzSHPweNwAbatt454//AcB/XnYqV581lUkFWfg8sVHF/uS2rLqE+z6+jCxv7H39OwgigqryxOaDnF5ZwPSSHGIXchJf7q7ndjNvcj4Xn1o+YN5wVJXeUITmriAXfudZAO64bhFXnTU1vkw4EmVbQwdX/ygW957/dzmdgTA5Xjce95HR0MbOPupbe1k0vXjA+lXhiw9t4tW9LXzjmtO5cE4ZLtfQuILhaLwd+gXCEfY39/DSrmaWVhezYGrhsJ+hJxghy+vG7ay3NxjB4xY21LZxqKOPC+eUEwhH2NfSQzSq5GV5KMrx8V+Pb+NTF8/hjKqh6+23sbaNquJsSvP88TJV5daHN+PzuPjGNaejqry8u5mK/CxmluXSG4rwqd+sp703xP+8fyHVZblAbEipLM9Pc1eAtt4Q0ahS19rLjNIcqktzUcDtEroDYe56bhdTCrO54swpFGZ7h3zmv73RyDmzSukJhGnsDDB/SgERVZ7ccpB9h7v5yFuqKcw58r6eYJhsr5vDXUH6QhFeb+jgvDll5Pk9qCqhiNLaEyQUiVJZlE1Ld5CSXF/8N3SwvY+W7iCKMr0kh91N3Zw1rSi+/mhU+e2a/VxyWgWNHQFmV+QRDEcpzvEiIuw93I0IVBXnxL+n4b7LQDga/92HIlG2HehgwdSCAb+1/u+4rTdIeZ6fgx19NHcFyfV7nOFPOG1KPh63i65AmM6+EFMKs+O/M7dLCDnDYtsPdbL9YCcr5lVQnueP/zajUaWxM8Dkwqz4byyiSpbHHU8IkajicQt/ff0Q1WW5zCrLw+MSDncHKMz28uLOwxxo7+Mts0qZVZZLIBwlqkqu30NDe2+8V5NqE75HAeDcuOx2YqfH3qOq30y2/Hj1KK684wUq8rO455/PHjKvf4P8+jdWku1zD5m/qa6Nn72wh39bMYdTJuWPqd47/17Dd57azsu3roj/OPvtONTJ23/wPABrv3wpZQkbH4Dbn9nB7c/sZO+3rhhTnamgqm+aWIwxE8Px3qNAVZ8Ansh0HFvqO7jqrLxh5928ch7ffuoNsrzDnx9wZlURd1y36KjqvXH5bN61qHJIkgCoLMrmjMpCyvJ8lOT4hsz/3KVz+dylc4+q3mNlScKYE8NxkSgmgv4zfPpGGDf95MWz+eTFs8elbpdLhk0SALl+D4995oJxqdcYY+D4OD12Quh1znS4YM7RnVFgjDHHK0sUo9R/No3fY01mjDm52FZvlAIhJ1GMcAzCGGNOVLbVG6X+awN87qFnNBljzInMEsUo9V/0YkNPxpiTjW31Rqn/PkODL+AyxpgTnW31Rsl6FMaYk5Vt9Uap/xiF32vHKIwxJxdLFKN05GC2NZkx5uRiW71R6j9GYafHGmNONrbVG6WvP7YNgKJBd900xpgTnSWKUdh5qJOW7iDLZpYMuDW0McacDCZEohCR74rIGyKySUT+JCJFCfNuFZEaEdkuIpdlIr77X9kHwPfee1YmqjfGmIyaEIkCWAWcrqpnAjuAWwFEZD6xBxUtAFYCd4pIWk87+q/Ht3Hvy/s4Z2YJ00py0lm1McZMCBMiUajq06ra/9zHV4AqZ/oa4PeqGlDVPUANsCxdcUWcJ2ydXV3MvR9LW7XGGDOhTIhEMcjHgCed6UqgNmFenVM2hIjcICJrRWRtU1NTSgJ5eutBeoIRrj17evxRisYYc7JJ24OLROQZYPIws25T1UecZW4DwsBv+t82zPLDPrtVVe8G7obYo1CPOWDg4dfqAbjs9OHCNsaYk8OYEoWIFADlqrprUPmZqrop2XtV9dI3Wff1wJXAJXrkQd51wLSExaqAA2OJ+WgFwhFeqjnMvMn55PntQYDGmJPXqIeeROR9wBvAQyKyVUTOTpj9q2MJQkRWAjcDV6tqT8KsR4FrRcQvIjOBU4A1x1LXaP30ud10ByPcvHJeOqozxpgJayy7yl8Clqhqg4gsA34tIl9S1YcZfohoLH4E+IFVIgLwiqreqKpbReQPwDZiQ1I3qerwD61OsRdrDlOS62P53PJ0VGeMMRPWWBKFR1UbAFR1jYi8FXhcRKoY4bjBaKnqnCTzvgl881jWP1aqypo9LVy3bDpu17HmQGOMOb6N5aynDhGZ3f/CSRoXEzuFdUGK48qop7cdAqCqODvDkRhjTOaNJVHczKAhJlXtJHYhXFr3+Mfbd556A4Crz5qa4UiMMSbzxpIo7gXeLSLx4SoRmQT8Ergq1YFlSmt3kF1N3fzbJafYldjGGMPYEsUSYCbwmoisEJHPEjsD6WXgnPEILhM21rUBcOqk/AxHYowxE8OoD2araitwo5MgniF2PcO5qlo3XsFlwuObGgA4e2ZxhiMxxpiJYSzXURSJyE+BjxI7LvEg8KSIrBiv4DKhprELgHK7nbgxxgBjOz12PXAnsWsZwsDTIrKQ2B1d96nqdeMSYZo1dvTx7sVVONdzGGPMSW8siWL54GEmVd0AnCci/5rasDKntSdESa49xc4YY/qNeugp2bEIVf1ZasLJrEMdffSGIuRnWaIwxph+E/E24xlT39YLQHm+HZ8wxph+ligSBEJRAKpLczMciTHGTByWKBIEwrH7Dfq91izGGNPPtogJAuFYj8LvsWYxxph+E2qLKCJfEBEVkTLntYjID0WkRkQ2icji8az/SKKwx54aY0y/CZMoRGQa8DZgf0LxO4g9rOgU4AbgJ+MZQyDkDD1Zj8IYY+Im0hbxB8AXGfhsi2uA+zTmFaBIRKaMVwA7DnUCdozCGGMSTYgtoohcDdSr6sZBsyqB2oTXdU7ZcOu4QUTWisjapqamo4qjJxjrURRl+47q/cYYcyIay5XZx0REngEmDzPrNmKPWX37cG8bpmzYp+mp6t3A3QBLly49qifuRVWpyPfjs6EnY4yJS1uiUNVLhysXkTOI3b58o3N/pSpgvfNc7jpgWsLiVcTuWjsuQhHF67YkYYwxiTK+VVTVzapaoarVqlpNLDksVtWDwKPAR5yzn84F2vuf2z0eIlG1Z2QbY8wgaetRHKUngMuBGqCH2C3Ox00oEsXjtkRhjDGJJlyicHoV/dMK3JSuusMRxWM9CmOMGSDjQ08TSTiqeFzWJMYYk8i2ignC0SheG3oyxpgBLFEksIPZxhgzlCWKBLGD2dYkxhiTyLaKCexgtjHGDGWJIkE4qtajMMaYQWyrmGBDbZv1KIwxZpAJdx1FJr13SRWXnzFuN6c1xpjjkiWKBN9971mZDsEYYyYcG3oyxhiTlMTuknFiEZEmYN9Rvr0MOJzCcFLF4hobi2tsLK6xORHjmqGq5cPNOCETxbEQkbWqujTTcQxmcY2NxTU2FtfYnGxx2dCTMcaYpCxRGGOMScoSxVB3ZzqAEVhcY2NxjY3FNTYnVVx2jMIYY0xS1qMwxhiTlCUKY4wxSVmicIjIShHZLiI1InJLBurfKyKbRWSDiKx1ykpEZJWI7HT+L3bKRUR+6MS6SUQWpzCOe0SkUUS2JJSNOQ4Rud5ZfqeIXD9OcX1NROqdNtsgIpcnzLvViWu7iFyWUJ7S71lEponIsyLyuohsFZHPOuUZbbMkcWW0zUQkS0TWiMhGJ66vO+UzRWS189kfEBGfU+53Xtc486vfLN4Ux/UrEdmT0F4LnfK0/faddbpF5DURedx5nd72UtWT/h/gBnYBswAfsBGYn+YY9gJlg8q+A9ziTN8CfNuZvhx4EhDgXGB1CuNYDiwGthxtHEAJsNv5v9iZLh6HuL4GfGGYZec736EfmOl8t+7x+J6BKcBiZzof2OHUn9E2SxJXRtvM+dx5zrQXWO20wx+Aa53yu4BPOtOfAu5ypq8FHkgW7zjE9SvgPcMsn7bfvrPezwO/BR53Xqe1vaxHEbMMqFHV3aoaBH4PXJPhmCAWw73O9L3AOxPK79OYV4AiEUnJ3QxV9Xmg5RjjuAxYpaotqtoKrAJWjkNcI7kG+L2qBlR1D1BD7DtO+fesqg2qut6Z7gReByrJcJsliWskaWkz53N3OS+9zj8FVgAPOuWD26u/HR8ELhERSRJvquMaSdp++yJSBVwB/Nx5LaS5vSxRxFQCtQmv60j+RzUeFHhaRNaJyA1O2SRVbYDYHz5Q4ZSnO96xxpHO+D7tdP3v6R/eyVRcTjd/EbG90QnTZoPiggy3mTOMsgFoJLYh3QW0qWp4mDri9Tvz24HSdMSlqv3t9U2nvX4gIv7BcQ2qfzy+x9uBLwJR53UpaW4vSxQxwz2EIt3nDZ+vqouBdwA3icjyJMtOhHhh5DjSFd9PgNnAQqAB+F6m4hKRPOAh4HOq2pFs0XTGNkxcGW8zVY2o6kKgithe7WlJ6shYXCJyOnArMA84m9hw0s3pjEtErgQaVXVdYnGSOsYlLksUMXXAtITXVcCBdAagqgec/xuBPxH7AzrUP6Tk/N/oLJ7ueMcaR1riU9VDzh93FPgZR7rSaY1LRLzENsa/UdWHneKMt9lwcU2UNnNiaQP+TmyMv0hE+h97kFhHvH5nfiGxIch0xLXSGcJTVQ0AvyT97XU+cLWI7CU27LeCWA8jve11rAdZToR/xJ7LsZvYQZ7+A3YL0lh/LpCfMP0SsXHN7zLwgOh3nOkrGHggbU2K46lm4EHjMcVBbM9rD7GDecXOdMk4xDUlYfrfiY3BAixg4IG73cQOyqb8e3Y++33A7YPKM9pmSeLKaJsB5UCRM50NvABcCfyRgQdnP+VM38TAg7N/SBbvOMQ1JaE9bwe+lYnfvrPuizlyMDut7ZWyjcvx/o/YWQw7iI2X3pbmumc5X+JGYGt//cTGFv8K7HT+L3HKBfixE+tmYGkKY/kdsSGJELG9kI8fTRzAx4gdMKsBPjpOcf3aqXcT8CgDN4K3OXFtB94xXt8zcAGxLvwmYIPz7/JMt1mSuDLaZsCZwGtO/VuAryT8DaxxPvsfAb9TnuW8rnHmz3qzeFMc19+c9toC3M+RM6PS9ttPWO/FHEkUaW0vu4WHMcaYpOwYhTHGmKQsURhjjEnKEoUxxpikLFEYY4xJyhKFMcaYpCxRGJOEiLzk/F8tIh9I8bq/NFxdxkw0dnqsMaMgIhcTu+vqlWN4j1tVI0nmd6lqXiriM2Y8WY/CmP/f3t2rRhVFURz/L7AJFjb6CBELQSwUAgoW4gPYpBAsbFTQM+HLZAAAAdFJREFUgI34CIFUtlY20UbR0ljFYCAmEHSIkAcQUQRFxEBQ2RZ7X3Md9CQMSar1q2buxxluMbPn3DOzdoOkLlF0GjhbPQluVYDcjKSVCoy7WsefU/aBeED+EQtJTyvs8W0X+ChpGhir8Wb7r1W9DmYkrSl7lEz2xp6X9EjSuqTZSgY121MHtj/EzMgYjj8zivrA/xoRpypRdFHS8zr2NHA8Ms4Z4EpEfJY0BqxIehwRdyTdiAyhG3aRDO07ARyucxZq30kyjuE9sEhmAb3c/cs12+IZhdloLgCXK5b6FRnZMV77lntFAmBK0htgiQxmG6ftDPAwMrzvI/CCTC/txn4XGer3msy/MttTnlGYjUbAzYiY+2tjrmV8H3p+HpiIiA1J82Qez3Zj/89m7/Ev/B62feAZhdnOfCNbinbmgOsV5Y2ko5IO/uO8Q8CXKhLHyKTRzo/u/CELwGStgxwh28Au78pVmI3A30bMdmYA/KxbSPeBu+Rtn9VaUP7EVjvKvmfANUkDMrVzqbfvHjCQtBoRl3rbnwATZJpwALcj4kMVGrN955/HmplZk289mZlZkwuFmZk1uVCYmVmTC4WZmTW5UJiZWZMLhZmZNblQmJlZ028KNvwxG9xvJgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%run EXTRAS/plotSDerror.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataArr, labelMat = loadDataSet()\n",
    "weights = stocGradAscent1(array(dataArr), labelMat)\n",
    "plotBestFit(weights)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 示例：从疝气病症预测病马的死亡率\n",
    "\n",
    "1. 收集数据：\n",
    "2. 准备数据：解析文本文件，并填充缺失值\n",
    "3. 分析数据：可视化并观察数据\n",
    "4. 训练算法：使用优化算法，找到最佳的系数\n",
    "5. 测试算法：观察错误率，根据错误率决定是否重新训练，通过改变迭代次数和步长等超参来得到更好的回归系数。\n",
    "6. 使用算法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据：处理数据中的缺失值\n",
    "**几种常用做法**\n",
    " - 使用可用特征的均值来填补缺失值\n",
    " - 使用特殊值来填补缺失值\n",
    " - 忽略有缺失值的样本\n",
    " - 使用相似样本的均值填补缺失值\n",
    " - 使用另外的机器学习算法预测缺失值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试算法：用Logistic回归进行分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def classifyVector(inX, weights):\n",
    "    prob = sigmoid(sum(inX*weights))\n",
    "    if prob>0.5:return 1.0\n",
    "    else:return 0.0\n",
    "\n",
    "def colicTest():\n",
    "    frTrain = open('horseColicTraining.txt')\n",
    "    frTest = open('horseColicTest.txt')\n",
    "    trainingSet, trainingLabels = [], []\n",
    "    for line in frTrain.readlines():\n",
    "        currLine = line.strip().split('\\t')\n",
    "        lineArr = []\n",
    "        for i in range(21): #21个特征，1个标签\n",
    "            lineArr.append(float(currLine[i]))\n",
    "        trainingSet.append(lineArr)\n",
    "        trainingLabels.append(float(currLine[21]))\n",
    "    trainWeights = stocGradAscent1(array(trainingSet), trainingLabels, 500)\n",
    "    errorCount, numTestVec = 0, 0.0\n",
    "    for line in frTest.readlines():\n",
    "        numTestVec += 1.0\n",
    "        currLine = line.strip().split('\\t')\n",
    "        lineArr = []\n",
    "        for i in range(21): #21个特征，1个标签\n",
    "            lineArr.append(float(currLine[i]))\n",
    "        if int(classifyVector(array(lineArr), trainWeights)) != int(currLine[21]):\n",
    "            errorCount += 1\n",
    "    errorRate = (float(errorCount/numTestVec))\n",
    "    print(\"测试集错误率：%f\" % errorRate)\n",
    "    return errorRate\n",
    "def multiTest():\n",
    "    numTests, errorSum = 10, 0.0\n",
    "    for k in range(numTests):\n",
    "        errorSum += colicTest()\n",
    "    print(\"经过%d次迭代，平均错误率为：%f\" % (numTests, errorSum/float(numTests)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集错误率：0.283582\n",
      "测试集错误率：0.462687\n",
      "测试集错误率：0.298507\n",
      "测试集错误率：0.313433\n",
      "测试集错误率：0.388060\n",
      "测试集错误率：0.507463\n",
      "测试集错误率：0.358209\n",
      "测试集错误率：0.373134\n",
      "测试集错误率：0.328358\n",
      "测试集错误率：0.343284\n",
      "经过10次迭代，平均错误率为：0.365672\n"
     ]
    }
   ],
   "source": [
    "multiTest()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
